package com.zhengqing.system.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @ClassName PdfUtil
 * @Description pdf处理工具类
 * @Author Des1gn
 * @Version 1.0
 **/
@Slf4j

public class PdfUtil {
    private static SnowFlakeUtil idUtil = null;

    static {
        idUtil = new SnowFlakeUtil(9,9);
    }


    public static String pdfFirstPageToPng(String pdfPath,String pngPath){
        // 原始pdf文件
        File pdfFile = new File(pdfPath);
        // 图片名称
        String imageName = String.valueOf(idUtil.nextId()).concat(".png");
        // 设置图片保存地址和图片名称
        File imgFile = new File(pngPath, imageName);
        PDDocument pd = null;
        try {
            // 加载pdf文件
            pd = PDDocument.load(pdfFile);
            // 准备pdf文件渲染对象
            PDFRenderer pdfRenderer = new PDFRenderer(pd);
            // 创建图片文件
            if (!imgFile.exists()) {
                imgFile.createNewFile();
            }
            // 判断pdf页数
            if (pd.getNumberOfPages() > 1) {
                // 设置页数（首页从0开始）、每英寸点数、图片类型
                BufferedImage bim = pdfRenderer.renderImageWithDPI(0, 72, ImageType.RGB);
                // 将图片写入到图片对象中
                ImageIO.write(bim, "png", new FileOutputStream(imgFile));
            }
        } catch (Exception e) {
            log.error("pdf图片生成失败->{}",e);
        } finally {
            try {
                if (pd != null) {
                    pd.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return pngPath.concat(imageName);
    }
}
